package com.hd.core.project.module.base;

import com.hd.core.framework.web.controller.BaseController;
import com.hd.core.framework.web.domain.AjaxResult;
import com.hd.core.project.module.config.BaseModuleProperties;
import com.hd.core.project.module.constants.ModuleConstants;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 增强框架的BaseController基本类!
 * 使用泛型来解决一些重复性的属性
 * @author RichardTang
 */
public class WrapperBaseController<T extends BaseModuleProperties> extends BaseController {

    protected static final Logger log = LoggerFactory.getLogger(WrapperBaseController.class);

    //具体的Properties配置类
    @Autowired
    protected T properties;

    //所属目录路径
    protected String directoryPath;

    //返回的视图路径前缀完整
    protected String viewPathPrefix;

    //初始化时必须指定Controller对应的功能目录
    protected WrapperBaseController(String directoryPath){
        this.directoryPath = directoryPath;
    }

    /**
     * 当properties属性赋值之后执行该代码块,并且完成 viewPathPrefix 值的拼接
     */
    @Autowired
    private void setViewPathPrefix(){
        this.viewPathPrefix = properties.getPathPrefix() + directoryPath;
    }

    /**
     * 路径返回,拼接模板前缀
     * @param resName 模板前缀后的另外
     */
    protected String getResponseViewPath(String resName){
        return viewPathPrefix + resName;
    }

    /**
     * 该方法是重写BaseController中的方法,为了配合Mybatis-plus的返回结构所以重写
     * 响应返回结果
     *
     * @param result 插入结果
     * @return 操作结果
     */
    protected AjaxResult toAjax(boolean result) {
        return result ? success() : error();
    }
    
    /**
     * 判断集合是否为空来返回数据,并将集合添加到视图中返回
     * @param result
     * @return
     */
    protected AjaxResult toSelect2Ajax(List<?> value) {
    	return toAjax(ModuleConstants.SELECT2_KEY,value);
    }
    
    /**
     * 判断集合是否为空来返回数据,并将集合添加到视图中返回
     * @param result
     * @return
     */
    protected AjaxResult toAjax(String key,List<?> value) {
    	if(value != null && value.size() > 0) {
    		return new AjaxResult().put(key,value);
        }
    	return AjaxResult.error(404,"未查询到结果!");
    }
}
